import runtimeType from '../sys/runtimeType.js';
let __focus_obj_timeout_loading = null; // 加载框延时显示定时器，加载弹框出现时，一定 = null
let __focus_obj_plus_waiting = null; // 原生plus弹出框对象

/**
 * 显示接口请求中提示框【同步方法】
 * @description 显示接口请求中提示框，仅在接口请求中调用。如果是在PC端使用，那么是创建的dom；如果是在uni使用，那么是调用的官方api
 * @param {Object} paramLast 接口的请求参数设置
 * @param {String,Number} progress 进度类加载框提示进度数值
 */
export function showLoading(paramLast = {}, progress = '') {
    
    // 获取当前运行环境
    var runType = runtimeType();
    // 弹框元素节点id
    var str_dom_id = '__focus_network_loading__';
    // 弹框元素显示文本节点id
    var str_dom_span_id = '__focus_network_loading_span__';
    // 对提示文本进行封装
    var str_loadingText = paramLast["loadingText"];
    // 进度百分比数值显示
    if (progress != '') { str_loadingText += ' ' + progress + '%'; }
    
    // 如果传入了提示文字，才能执行
    if (paramLast["loadingText"].length > 0)
    {
        // 如果是“非UNI”环境
        if (runType == 'nonUNI')
        {
            // 创建一个div节点
            var dom_loading = document.createElement("div");
            dom_loading.setAttribute('id', str_dom_id);
            // 创建加载框dom字符串
            var str_loadingDom = `
                <div style="width:100px; height:100px; padding:10px; position:fixed; right:10px; bottom:55px; z-index:99; border-radius:10px; background-color:#FFFFFF; box-shadow:0 0 10px #CECECE; opacity:0.8; box-sizing:border-box; display:flex; flex-direction:column; justify-content:center; align-items:center;">
                    <img style="width:30px; height:30px;" src=""/>
                    <span id="${str_dom_span_id}" style="width:100%; margin-top:10px; font-size:13px; line-height:1.2; color:#565656; text-align:center; text-overflow:ellipsis; white-space:nowrap; word-break:break-all; overflow:hidden;"
                    >${str_loadingText}</span>
                </div>
            `;
            // 将加载框放入div容器中
            dom_loading.innerHTML = str_loadingDom;
            
            // 如果开启了延时处理
            if (paramLast["loadingDelayed"] == true)
            {
                // 如果已经存在，先注销定时器
                if (__focus_obj_timeout_loading) { clearTimeout(__focus_obj_timeout_loading); __focus_obj_timeout_loading = null; }
                // 创建定时器
                __focus_obj_timeout_loading = setTimeout(()=>{
                	// 初始化定时器变量
                	__focus_obj_timeout_loading = null;
                	// 检测是否已经有loading弹框dom对象
                	var dom_loading_had = document.getElementById(str_dom_id);
                    // 如果dom已经存在，那么直接更改显示文本
                	if (dom_loading_had) { document.getElementById(str_dom_span_id).innerHTML = str_loadingText; }
                	// 否则将loading弹框dom对象添加到页面中
                	else { document.body.appendChild(dom_loading); }
                }, 2500);
            }
            // 没开那么就立即弹出
            else {
                // 检测是否已经有loading弹框dom对象
                var dom_loading_had = document.getElementById(str_dom_id);
                // 如果dom已经存在，那么直接更改显示文本
                if (dom_loading_had) { document.getElementById(str_dom_span_id).innerHTML = str_loadingText; }
                // 否则将loading弹框dom对象添加到页面中
                else { document.body.appendChild(dom_loading); }
            }
        }
        // 如果是“APP”环境
        else if (runType == 'APP-PLUS' || runType == 'APP-NVUE')
        {
            // 如果开启了延时处理
            if (paramLast["loadingDelayed"] == true)
            {
                // 如果已经存在，先注销定时器
                if (__focus_obj_timeout_loading) { clearTimeout(__focus_obj_timeout_loading); __focus_obj_timeout_loading = null; }
                // 创建定时器
                __focus_obj_timeout_loading = setTimeout(()=>{
                	// 初始化定时器变量
                	__focus_obj_timeout_loading = null;
                	// 如果原生弹出框已经存在
                	if (__focus_obj_plus_waiting) { __focus_obj_plus_waiting.setTitle(str_loadingText); }
                	// 没有则创建原生弹出框
                	else { __focus_obj_plus_waiting = plus.nativeUI.showWaiting(str_loadingText); }
                }, 2500);
            }
            // 没开那么就立即弹出
            else {
                // 如果原生弹出框已经存在
                if (__focus_obj_plus_waiting) { __focus_obj_plus_waiting.setTitle(str_loadingText); }
                // 没有则创建原生弹出框
                else { __focus_obj_plus_waiting = plus.nativeUI.showWaiting(str_loadingText); }
            }
        }
        // 如果是其它环境
        else {
            // 如果开启了延时处理
            if (paramLast["loadingDelayed"] == true)
            {
                // 如果已经存在，先注销定时器
                if (__focus_obj_timeout_loading) { clearTimeout(__focus_obj_timeout_loading); __focus_obj_timeout_loading = null; }
                // 创建定时器
                __focus_obj_timeout_loading = setTimeout(()=>{
                	// 初始化定时器变量
                	__focus_obj_timeout_loading = null;
                	// 调用uni的loading弹框api
                	uni.showLoading({ title: str_loadingText, mask: paramLast["openMask"] });
                }, 2500);
            }
            // 没开那么就立即弹出
            else {
                // 调用uni的loading弹框api
                uni.showLoading({ title: str_loadingText, mask: paramLast["openMask"] });
            }
        }
    }
    
}

/**
 * 隐藏接口请求中提示框【同步方法】
 * @description 隐藏接口请求中提示框，仅在接口请求中调用。如果是在PC端使用，那么是创建的dom；如果是在uni使用，那么是调用的官方api
 * @param {Object} paramLast 接口的请求参数设置
 */
export function hideLoading(paramLast = {}) {
    
    // 获取当前运行环境
    var runType = runtimeType();
    // 弹框元素节点id
    var str_dom_id = '__focus_network_loading__';
    
    // 如果传入了提示文字，才能执行
    if (paramLast["loadingText"].length > 0)
    {
    	// 如果变量==null，说明正在弹框，那要取消它
    	if (__focus_obj_timeout_loading == null)
        {
            // 如果是“非UNI”环境
            if (runType == 'nonUNI')
            {
                // 根据id搜索loading的dom对象
                var dom_loading_had = document.getElementById(str_dom_id);
                // 如果存在则删除此dom
                if (dom_loading_had) { dom_loading_had.parentNode.removeChild(dom_loading_had); }
            }
            // 如果是“APP”环境
            else if (runType == 'APP-PLUS' || runType == 'APP-NVUE')
            {
                // 原生弹出框关闭
                plus.nativeUI.closeWaiting();
                // 初始化原生plus弹出框对象
                __focus_obj_plus_waiting = null;
            }
            // 如果是其它环境
            else {
                // 调用uni的loading隐藏api
                uni.hideLoading();
            }
        }
    	// 注销定时器变量
    	else if (__focus_obj_timeout_loading) { clearTimeout(__focus_obj_timeout_loading); }
    }
    
}